package com.jintoufs.service.tour;

import com.jintoufs.dao.QueryFilters;
import com.jintoufs.domain.bill.BillInfo;
import com.jintoufs.domain.constants.FullCalendar;
import com.jintoufs.domain.customer.Customer;
import com.jintoufs.domain.customer.CustomerCoupon;
import com.jintoufs.domain.tour.*;
import org.cosmos.modules.exception.ServiceException;

import java.util.List;
import java.util.Map;

/**
 * @author zhenghq
 * @date 2018-01-15 12:29
 */
public interface TourRouteService {

    /**
     * 根据过滤条件查询线路列表数据
     */
    List<Map<String,Object>> getByFilter(QueryFilters filters);

    /**
     * 保存线路信息
     * @param params 前台页面传入的线路信息
     * @param customer 当前登录者信息
     */
    void saveRoute(Map<String,Object> params,Customer customer) throws ServiceException;

    /**
     * 根据ID下架/上架线路信息
     * @param  routeId 线路ID
     */
    void deleteRouteInfoById(String routeId);

    /**
     * 根据线路ID获取线路主表数据
     * @param routeId 线路ID
     */
    TourRoute getRouteById(String routeId);

    /**
     * 根据线路ID获取线路日程列表
     * @param routeId 线路ID
     */
    List<TourRouteDay> getRouteDaysByRouteId(String routeId);

    /**
     * 根据日程ID获取日程活动列表
     * @param  routeDayId 日程ID
     */
    List<TourRouteDayDetail> getRouteDayDetailsByDayId(String routeDayId);

    /**
     * 根据线路ID删除线路日程列表数据
     * @param routeId 线路ID
     */
    void deleteRouteDaysByRouteId(String routeId);

    /**
     * 根据日程ID删除该日程对应活动列表数据
     * @param routeDayId 日程ID
     */
    void deleteRouteDayDetailsByDayId(String routeDayId);

    List<Map<String,Object>> getByParams(Map<String,Object> params);

    List<Map<String,Object>> queryByParams(Map<String,Object> params);


    public List<Map<String,Object>> getTourDayByRouteId(String id);

    TourRouteDayDetail getRouteDayDetailByDetailId(String dayDetailId);

    /**
     * 查询假期列表信息
     * @param params 查询条件：{custmerId:当前登录人ID}
     */
    List<Map<String,Object>> getTravelAgencyListByParams(Map<String,Object> params);
    /**
     * 获取以当前时间为准，不同时间段内订购指定线路的价格列表
     * @param param 查询条件：{tourRouteId:线路ID ， start：开始时间 ， end：结束时间}
     */
    List<FullCalendar> getPriceCalendar(Map<String,Object> param);
    List<Map<String,Object>> getPriceCalendar2(Map<String,Object> param);
    List<FullCalendar> getPriceCalendarForWeixin(Map<String,Object> param);
    List<Map<String, Object>> queryPriceByParams(Map<String, Object> params);

    void order(TourRouteOrder order, CustomerCoupon customerCoupon,String travelerInfo,BillInfo billInfo,String customerId) throws ServiceException;

    void order(TourRouteOrder order,List<TourRouteOrderDetail> details);

    List<Map<String,Object>> getTourRouteTypeInfo(Map<String,Object> params);

    Map<String,List<String>> getIndexData(Integer num,String customerId);

    TourRoutePrice selectByTourRoutePrice(TourRoutePrice tourRoutePrice);

    void updatePrice (TourRoutePrice record);

    void insertTourRoutePrice(TourRoutePrice recorde);

    void updateTourRoutePrice(TourRoutePrice recorde);

    TourRoutePrice getTourRoutePrice(Map<String,Object> params);

    Integer getMinReserve(String id,String startDate);

    TourRoute selectByPrimaryKey(String id);

    void update(TourRoute entity);

    Map<String,Object> getOnePrice(String tourId);

}
